<?php

// 
// Цены
//

require_once( "tools.class.php" );
require_once( "tables.class.php" );    
require_once( "datadefine.class.php" );

class Price extends tables 
{
    public function GetPage()
    {

        $data = new jqGridData();

        while( true )
        {
            if( $this->db == NULL ) {
                $data->userdata->errcode = 1;
                $data->userdata->errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
            
// Проверяем данные
            $page    = ( isset($_REQUEST["page"]) && $_REQUEST["page"] > 0 ) ? $_REQUEST["page"] : 1;
            $limit   = ( isset($_REQUEST["rows"]) && $_REQUEST["rows"] > 0 ) ? $_REQUEST["rows"] : 1;
            $sidx    = ( isset($_REQUEST["sidx"]) && $_REQUEST["sidx"] != '' ) ? $_REQUEST["sidx"] : 'car_id';
            $sord    = ( isset($_REQUEST["sord"]) && strtolower($_REQUEST["sord"]) == 'desc' ) ? 'DESC' : 'ASC';
            $search  = ( isset($_REQUEST["_search"]) && strtolower($_REQUEST["_search"]) == 'true') ? true : false;

// Фильтр
            $whc = array();
            
            if( isset($_REQUEST["fcar_id"]) && is_numeric($_REQUEST["fcar_id"]) ) {
                $whc[] = "car_id=" . $db->quote($_REQUEST["fcar_id"]);
            }
            
            if( $search )
            {
                if( isset($_REQUEST["setdate"]) && $_REQUEST["setdate"] != "") {
                    $whc[] = "setdate LIKE ".$db->quote("%".$_REQUEST["setdate"]."%");
                }
                if( isset($_REQUEST["price"]) && is_numeric($_REQUEST["price"]) ) {
                    $whc[] = "LTRIM(price.price) LIKE ".$db->quote(str_replace(',', '.', $_REQUEST["price"])."%");
                }
                if( isset($_REQUEST["active"]) && ($_REQUEST["active"] == "1" || $_REQUEST["active"] == "0") ) {
                    $whc[] = "active=".$db->quote($_REQUEST["active"]);
                }
            }
            $whereclaus = (count($whc) != 0 ) ? " WHERE " . implode(" AND ", $whc) : "";
            unset($whc);
            
// Получаем количество записей с учетом фильтра
            $sqlreq = "SELECT COUNT(*) AS count FROM price".$whereclaus;
            
            $recset = $db->query( $sqlreq );
            $row = $recset->fetch(PDO::FETCH_ASSOC);
            $count = $row['count'];
            $recset->closeCursor();
            
// Пустая таблица
            if ($count == 0) break;
            
// Рассчитаем сколько всего страниц займут данные в БД
            if( $count > 0 && $limit > 0) {
                $total_pages = ceil($count/$limit);
            } else {
                $total_pages = 0;
            }                  
            
            if ($page > $total_pages) $page=$total_pages;                  
            
            $start = $limit*$page - $limit;                  
            if($start < 0) $start = 0;                  
            
 // Формируем запрос
            $sqlreq = 
                  "SELECT * FROM price ".$whereclaus.
                  " ORDER BY ".$sidx." ".$sord." LIMIT ".$start.", ".$limit;
                  
            $recset = $db->query($sqlreq);                  
            
// Формирование объекта для возврата
            $data->page      = $page;
            $data->total     = $total_pages;
            $data->records   = $count;
            
// Строки данных для таблицы
            $i = 0;
            while($row = $recset->fetch(PDO::FETCH_ASSOC)) {
                $data->rows[$i]['id'] = $row['price_id'];
                $data->rows[$i]['cell'] = array(
                        $row['price_id'],
                        $row['car_id'],
                        implode('.',array_reverse(explode('-',$row['setdate']))),
                        $row['price'],
                        $row['active']
                );
                $i++;
            }
            break;
        }
        
// Отдаем результат
        header("Content-type: text/script;charset=utf-8");
        echo json_encode($data);
        return;
    }


    public function Insert()
    {
        $price_id = isset($_REQUEST["id"]) ? $_REQUEST["id"] : '';
        $car_id   = isset($_REQUEST["fcar_id"]) ? $_REQUEST["fcar_id"] : '';
        $setdate  = isset($_REQUEST["setdate"]) ? $_REQUEST["setdate"] : '';
        $price    = isset($_REQUEST["price"]) ? str_replace(',', '.', $_REQUEST["price"]) : '';
        $active   = isset($_REQUEST["active"]) ? $_REQUEST["active"] : '' ;

        $errmess = "";
        
        while (true)
        {
            if($price_id != "_empty" || !is_numeric($car_id) || $setdate == '' || 
               !is_numeric($price) || ( $active != "0" && $active != "1" ) ||
               preg_match("/(\d\d)\.(\d\d)\.(\d\d\d\d)/", $setdate, $d) == 0 ||
               !checkdate($d[2],$d[1],$d[3]) )
            {
                $errmess = "Нарушение формата данных";
                break;
            }

            $setdate = $d[3].'-'.$d[2].'-'.$d[1];
            
            if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
            
// Проверяем существование
            $sqlreq = "SELECT COUNT(*) AS count FROM price WHERE setdate=".$db->quote($setdate).
                    " AND car_id=".$db->quote($car_id);

            $recset = $db->query( $sqlreq );
            $row = $recset->fetch(PDO::FETCH_ASSOC);
            $count = $row['count'];
            $recset->closeCursor();
            if( $count > 0) {
                $errmess = "Цена по указаной дате уже установлена.";
                break;
            }

// Сбрасываем, если нужно флаг активности
            if( $active == "1") {
                $sqlreq = "UPDATE price SET active='0' WHERE car_id=".$db->quote($car_id)." AND active='1'";
                $db->exec( $sqlreq );
            }

// Добавляем
            $sqlreq = "INSERT INTO price (car_id, setdate, price, active) VALUES ("
                            .$db->quote($car_id).", ".$db->quote($setdate).", ".
                            $db->quote($price).", ".$db->quote($active).")";

            if( $db->exec($sqlreq) === false ){
                $errmess = "Ошибка добавления новой записи.";
                break;
            }

            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0 );            
        return;
    }

    
    public function Update()
    {
        $price_id = isset($_REQUEST["id"]) ? $_REQUEST["id"] : '';
        $car_id   = isset($_REQUEST["fcar_id"]) ? $_REQUEST["fcar_id"] : '';
        $setdate  = isset($_REQUEST["setdate"]) ? $_REQUEST["setdate"] : '';
        $price    = isset($_REQUEST["price"]) ? str_replace(',', '.', $_REQUEST["price"]) : '';
        $active   = isset($_REQUEST["active"]) ? $_REQUEST["active"] : '' ;

        $errmess = "";
    
        while (true)
        {
            if(!is_numeric($price_id) || !is_numeric($car_id) || $setdate == '' || 
               !is_numeric($price) || ( $active != "0" && $active != "1" ) ||
               preg_match("/^(\d\d)\.(\d\d)\.(\d\d\d\d)$/", $setdate, $d) == 0 ||
               !checkdate($d[2],$d[1],$d[3]) )
            {
                $errmess = "Нарушение формата данных";
                break;
            }

            $setdate = $d[3].'-'.$d[2].'-'.$d[1];

             if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
            
// Проверяем сеществование
            $sqlreq = "SELECT COUNT(*) as count FROM price WHERE setdate=".$db->quote($setdate). 
            " AND car_id = ".$db->quote($car_id)." AND price_id !=".$db->quote($price_id);

            $recset = $db->query( $sqlreq );
            $row = $recset->fetch(PDO::FETCH_ASSOC);
            $count = $row['count'];
            $recset->closeCursor();
            if( $count > 0) {
                $errmess = "Цена по указаной дате уже установлена.";
                break;
            }

// Сбрасываем, если нужно флаг активности
            if( $active == "1") {
                $sqlreq = "UPDATE price SET active='0' WHERE car_id=".$db->quote($car_id)." AND active='1'";
                $db->exec( $sqlreq );
            }

// Изменяем
            $sqlreq = "UPDATE price SET car_id=".$db->quote($car_id).", setdate=".$db->quote($setdate).
                        ", price=".$db->quote($price).", active=".$db->quote($active).
                        " WHERE price_id=".$db->quote($price_id);

            if( $db->exec($sqlreq) === false ){
                $errmess = "Ошибка обновления записи.";
                break;
            }

            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0 );            
        return;
    }

    
    public function Delete()
    {
        $errmess = "";
        $price_ids = (isset($_REQUEST['id']) && $_REQUEST['id'] != '') ?
            explode(",", $_REQUEST["id"], 100) : array();

        while( true ) {
            if (!Tools::is_numeric_array( $price_ids )) {
                $errmess = "Ошибка удаления записи.";
                break;
            }

            $price_id_list = implode(',', $price_ids);
            
            if( $this->db == NULL ) {
                $errmess = "Ошибка соединения с базой данных.";
                break;
            }
            $db = $this->db;
            
            $sqlreq = "DELETE FROM price WHERE price_id IN (".$price_id_list.")";

            if( $db->exec($sqlreq) === false ){
                $errmess = "Ошибка удаления записи(сей).";
                break;
            }

            break;
        }

        Tools::json_response( $errmess, $errmess ? 1 : 0 );            
        return;
    }


    public function Find() {}
    public function GetList() {}
    
} //End of Price class
?>
